package HtServer.FileUpload;

import java.io.File;
import java.io.IOException;


import HtServer.meeting.MeetingItem;
import HtServer.meeting.MeetingItems;
import HtServer.returnObject.ReturnObject;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import dataBase.ObjectId;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload2.core.DiskFileItemFactory;
import tools.Configure;
import tools.ImageTools;
import jakarta.servlet.annotation.WebServlet;
import java.io.PrintWriter;
import java.util.List;
//@MultipartConfig
//@WebServlet(name = "FileUploadTempServletTemp", value = "/uploadTemp")
@Deprecated // Deprecated @see MeetingFileUploadServlet.java
public class FileUploadTempServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    // 上传文件存储目录
    private static final String UPLOAD_DIRECTORY = "uploads";

    // 上传配置
    private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3;  // 3MB
    private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; // 40MB
    private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; // 50MB

    protected void doPost(HttpServletRequest request,
                          HttpServletResponse response) throws ServletException, IOException {
/*
        // 检测是否为多媒体上传
        if (!ServletFileUpload.isMultipartContent(request))
        {
            // 如果不是则停止


            PrintWriter writer = response.getWriter();
            writer.println("Error: 表单必须包含 enctype=multipart/form-data");
            writer.flush();
            return;
        }
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");

        String userid = request.getParameter("userid");
        System.out.println("userid = "+userid);
        ReturnObject rto = new ReturnObject();
        // 配置上传参数
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
        factory.setSizeThreshold(MEMORY_THRESHOLD);
        // 设置临时存储目录
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

        ServletFileUpload upload = new ServletFileUpload(factory);

        // 设置最大文件上传值
        upload.setFileSizeMax(MAX_FILE_SIZE);

        // 设置最大请求值 (包含文件和表单数据)
        upload.setSizeMax(MAX_REQUEST_SIZE);

        // 中文处理
        upload.setHeaderEncoding("UTF-8");

        // 构造临时路径来存储上传的文件
        // 这个路径相对当前应用的目录
        String WEBPARTH = "";
        String UPLOAD_PATH = getServletContext().getRealPath("./") + File.separator + UPLOAD_DIRECTORY;
//        String UPLOAD_PATH = Configure.getInstance().getProperties().getProperty("uploadpath");

        //判断操作系统是win 还是osx
//        String os = System.getProperty("os.name");
//        if(os.toLowerCase().startsWith("win")){
//            UPLOAD_PATH = Configure.getInstance().getProperties().getProperty("uploadpathwin");
//        }
        // 如果目录不存在则创建
        File uploadDir = new File(UPLOAD_PATH);
        if (!uploadDir.exists()) {
            uploadDir.mkdir();
        }
        WEBPARTH = "/"+UPLOAD_DIRECTORY;

        try {
            // 解析请求的内容提取文件数据
            @SuppressWarnings("unchecked")
//            List<FileItem> formItems = upload.parseRequest(request);
            List<FileItem> formItems = null;

            System.out.println(formItems.size());
            if (formItems != null && formItems.size() > 0) {
                // 迭代表单数据
                for (FileItem item : formItems) {
//                    System.out.println(item);
                    // 处理不在表单中的字段
                    if (!item.isFormField()) {
//                        String fileName = new File(item.getName()).getName();

                        String filename  = new String(item.getName().getBytes(), "UTF-8");
                        filename = new ObjectId() +filename.substring(filename.lastIndexOf('.'),filename.length());
                        WEBPARTH+= "/"+filename;
                        String filePath = UPLOAD_PATH + File.separator + filename;
                        File storeFile = new File(filePath);
                        // 保存文件到硬盘
                        item.write(storeFile);
                        // 在控制台输出文件的上传路径
                        System.out.println(filePath);

                        try
                        {
                            MeetingItem mi = MeetingItems.getInstance().getMeetingItem(userid);

                            mi.setImage(ImageTools.encodeImageToBase64(filePath));
                            mi.saveMeetingItem2Redis();

                        }
                        catch (Exception e)
                        {
                           System.err.println("error in uploadTempServlet"+e.getMessage());
//                           e.printStackTrace();
                        }




                        request.setAttribute("message",
                                "文件上传成功!");
                        rto.setMsg("文件上传成功");
                        JSONObject uploadre = new JSONObject();
                        uploadre.put("filename",filename);
                        uploadre.put("path",filePath);
                        uploadre.put("webpath",WEBPARTH);
                        rto.setJson(uploadre);
                    }
                    else {
                        String fieldName = item.getFieldName();
                        String fieldValue = item.getString();
                        System.out.println(fieldName + ": " + fieldValue);
                    }
                }
            }
        } catch (Exception ex) {
            request.setAttribute("message",
                    "错误信息: " + ex.getMessage());
        }

        PrintWriter writer = response.getWriter();
//        writer.println("上传成功");
        writer.write(JSON.toJSON(rto).toString());
//        writer.write("上传成功");
        writer.flush();
        writer.close();

//        JSONObject result = new JSONObject();
//        result.put("files", files);
//        printWriter.write(result.toString());
//        printWriter.close();
        // 跳转到 message
//        getServletContext().getRequestDispatcher("/message.jsp").forward(request, response);

  */
    }



}